package webserver;

import java.io.*;
import java.text.*;
import java.util.Date;

/**
 * Diese Klasse dient zum loggen von Ereignissen.
 * Aus verschiedenen Stellen im Programm werden Ereignisse Weggeschrieben.
 * @author Daniel
 */
public class Logging {

    private static Logging log;    
    private String fileName;

    private Logging() {
        
    }

    /**
     * Klasse als Singelton. Mit Überprüfung ob das Objekt bereits
     * instanziiert wurde.
     * @return Objektrückgabe.
     */
    public static synchronized Logging getInstance() {

        if(log == null) {
            log = new Logging();
        }
        
        return log;
            
    }

    /**
     * Übergabe des Namens des Loggfiles
     * @param time Name des Loggfiles.
     */
    private void setFileName(String time) {
        fileName = "log/" + time + ".log";
    }

    /**
     * Über das Objekt FileOutputStream werden die Ereignisse die
     * übergeben werden in einen Logfile geschrieben.
     * @param value Wegzuschreibendes Ereignis.
     */
    public void log(String value) {

        FileOutputStream out = null;
        Date dt = new Date();

        SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
        setFileName(dateFormat.format(dt));
        
        String msg = "";

        if(value.equals("#1#")) { // server started
            msg = System.getProperty("line.separator");
            msg += dt.toString() + ": ";
            msg += "## SERVER STARTED ##";
            msg += System.getProperty("line.separator");
        }
        else {
            msg = dt.toString() + ": " + value;
            msg += System.getProperty("line.separator");
        }

        try {
            out = new FileOutputStream(fileName, true);            
            out.write(msg.getBytes());            
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}
